Skip to main content

Inner Queries

caution

This feature is available starting from QQL 5.6.78.

With inner queries, you can embed a select statement within the from clause of another select statement. Queries can be combined in a sequential manner, facilitating layered data analysis.

Inner queries allow for breaking down complex queries into smaller components where each subquery performs a distinct task.

Limitations​

  • Scope: Inner subqueries can only be used in the from clause.
  • Performance: Be aware that using multiple subqueries may impact performance.

Use Cases​

1. Data resampling before final calculations

This query gets the latest value in each millisecond and calculates the sum for each second.

select sum{}(v) from (
select value as v from stream
over time (1ms)
)
over time (1s)

2. Alternative to having clause

In this case, we use the inner query because the min > 27020 condition can affect the result set.

SELECT * FROM (
SELECT min{}(entries[this is TradeEntry][0].price) as 'min'
FROM "COINBASE"
OVER TIME(1s)
WHERE symbol == 'BTC/USDT'
) WHERE min > 27020

3. More intuitive and performant ways of making queries

This query counts the distinct number of symbols.

Without an inner query, the COLLECT_UNIQUE function accumulates symbols in an array that can require large memory allocations:

SELECT SIZE(COLLECT_UNIQUE{}(symbol)) FROM "securities"

With an inner query:

SELECT COUNT{}() FROM (SELECT DISTINCT symbol FROM "securities")